#ifndef __VEC4_H__
#define __VEC4_H__

namespace libvec
{
  struct vec2;
  struct vec3;
  struct mat4;
  struct dvec4;

  struct vec4
  {
    float x, y, z, w;

    vec4();
    vec4(dvec4 v);
    vec4(float value);
    vec4(vec3 v, float w);
    vec4(vec2 v, float z, float w);
    vec4(float x, float y, float z, float w);

    float &operator[](int index);

    vec4 operator=(vec4 v);

    bool operator==(vec4 v);
    bool operator!=(vec4 v);

    vec4 &operator+();
    vec4 &operator-();

    vec4 operator+(vec4 v);
    vec4 operator+=(vec4 v);
    vec4 operator-(vec4 v);
    vec4 operator-=(vec4 v);
    vec4 operator*(mat4 m);
    vec4 operator*=(mat4 m);
    vec4 operator*(float scale);
    vec4 operator*=(float scale);
    vec4 operator/(float scale);
    vec4 operator/=(float scale);
  };
}

#endif /* __VEC4_H__ */
